package com.zpf.service.impl;

import com.zpf.dao.AddressDao;
import com.zpf.dao.OrderDao;
import com.zpf.dao.impl.AddressDaoImpl;
import com.zpf.dao.impl.OrderDaoImpl;
import com.zpf.pojo.Address;
import com.zpf.service.AddressService;
import com.zpf.utils.DataSourceUtils;
import com.zpf.utils.TxUtils;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;

public class AddressServiceImpl implements AddressService {

    AddressDao addressDao = new AddressDaoImpl();

    @Override
    public List<Address> findAddListByUid(int uid) {
        return addressDao.findAddListByUid(uid);
    }

    @Override
    public void insert(Address address) {
        addressDao.insert(address);
    }

    OrderDao orderDao = new OrderDaoImpl();

    @Override
    public void deleteById(String id) {
        //查询该地址是否在订单表出现过，如果出现，则不能删除，如果没出现，则删除
        long count = orderDao.findCountByAid(id);
        if (count == 0) {
            addressDao.deleteById(id);
        }else {
            System.out.println("与订单关联，不能删除");
        }
    }

    @Override
    public void update(Address address) {
        addressDao.update(address);
    }

    /**
     * 事务：
     * 开启事务：conn.setAutoCommit(false)
     * 提交事务：conn.commit();
     * 回滚事务：conn.rollback();
     * 结束事务：conn.setAutoCommit(true)
     *
     *
     * 事务自动提交
     *
     * /**
     *      * 事务流程
     *      * try {
     *      *     开启事务： conn.setAutoCommit(false)  ==》 设置事务不能自动提交
     *      *      执行具体的业务
     *      *     提交事务：conn.commit();
     *      * } catch(Exception e) {
     *      *     回滚事务：conn.rollback();
     *      * } finally {
     *      *     结束事务：conn.setAutoCommit(true);
     *      * }
     *      *
     *      *
     *      * 事务自动提交：执行sql自动提交
     *      *
     *      * 设置用户的 默认收货地址
     *      * 1. 设置该用户的level = 0 （首先设置该用户都不是默认地址）
     *      * 2. 设置某地址为默认地址(level = 1)
     *      * @param aid
     *      * @param uid
     *      */













    @Override//设置默认收货地址,该用户level都等于0，设置某地址为默认地址=1
    public void setDefaultAddress(String aid, int uid) {

        Connection conn = DataSourceUtils.getConnection();
        try{
//            开启事务：
            conn.setAutoCommit(false);
            //设置都不是默认地址
            addressDao.clearDefaultAddress(uid);
            //设置某地址为某用户的默认地址
            addressDao.setDefaultAddress(aid);
//            提交事务：
            conn.commit();
        }catch (Exception e){
//            回滚事务：
            try {
                conn.rollback();
            } catch (SQLException e1) {
                e1.printStackTrace();
            }
        }finally {
            //移除线程中的连接对象
            TxUtils.remove();
//            结束事务：
            try {
                conn.setAutoCommit(true);
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }




    }
}